#ifndef C_COMPILER_GLOBAL_H
#define C_COMPILER_GLOBAL_H

#include <string>
#include <unordered_map>
#include <unordered_set>
#include <map>
#include "Production.h"
#include "AST.h"
using namespace std;

extern unordered_map<string, unordered_set<string>> FirstSet;   // 存放FIRST集合
extern unordered_map<string, unordered_set<string>> FirstSetBeta;  // 存放β的first
extern unordered_map<string, vector<string>> production_map; // 存放产生式
extern unordered_set<string> VnSet;
extern unordered_set<string> VtSet; // 存放非终结符集合
extern unordered_map<string, unordered_set<string>> FollowSet;
extern string start;  // 开始符号
extern map<string, int> predictionTable;
#define GRAMMARSIZE 98
extern Production* productionsArray[GRAMMARSIZE]; // 产生式数组
extern vector<pair<string, ASTNode*>> stackVector; // 当前栈
extern vector<pair<int,string>> readerVector; // 待读队列
extern map<int, string> map_i2s; // 符号单词Map，符号码为键，单词为值
extern map<string, int> map_s2i; // 单词符号Map，单词为键，符号码为值11


#endif //C_COMPILER_GLOBAL_H
